Gleam: Functions
Functions
関数は fn で宣言する
code:gleam
fn double(a: Int) -> Int {
multiply(a, 2)
}
fn multiply(a: Int, b: Int) -> Int {
a * b
}
pub を付けないと、モジュール 外からアクセスできないプライベート関数になる 引数と戻り値の 型注釈 は任意だが、付けることで設計の意図を伝えることができる Higher order functions
code:gleam
fn twice(argument: Int, passed_function: fn(Int) -> Int) -> Int {
passed_function(passed_function(argument))
}
fn add_one(argument: Int) -> Int {
argument + 1
}
関数の型を定義するには、fn を用いる
Anonymous functions
let add_one = fn(a) { a + 1 }
名前付き関数と同じように利用できる
io.debug(add_one(1))
定義されたときにスコープ内にあった変数を参照できるため、クロージャ になる code:gleam
let secret_number = 42
let print_secret = fn() { io.println(int.to_string(secret_number)) }
print_secret() // 42
Function captures
Gleam の機能の 1 つで、1 つの引数を受け取り、「その引数を持つ別の関数」を即座に呼び出す無名関数を作成する省略記法 code:gleam
fn add(a: Int, b: Int) -> Int {
a + b
}
let add_one = add(1, _)
add_one(2) // 3
無名関数 fn(a) { some_function(..., a, ...) } は some_function(..., _, ...) と等価である Generic functions